Skip to content

Commit b45bcdb

Browse files
authored
Improving performance of calls using namedtuples (#16)
Moving namedtuple creation out of function calls, its slow and can be reused. Moving the "is Bool" conditional out of the loop in Fifo::read
1 parent 9d14936 commit b45bcdb

File tree

1 file changed

+26
-20
lines changed

1 file changed

+26
-20
lines changed

nifpga/session.py

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,9 @@ def _irq_ordinals_to_bitmask(self, ordinals):
187187
bitmask |= (1 << ordinal)
188188
return bitmask
189189

190+
WaitOnIrqsReturnValues = namedtuple('WaitOnIrqsReturnValues',
191+
["irqs_asserted", "timed_out"])
192+
190193
def wait_on_irqs(self, irqs, timeout_ms):
191194
""" Stops the calling thread until the FPGA asserts any IRQ in the irqs
192195
parameter or until the function call times out.
@@ -223,10 +226,8 @@ def wait_on_irqs(self, irqs, timeout_ms):
223226
finally:
224227
self._nifpga.UnreserveIrqContext(self._session, context)
225228
irqs_asserted = [i for i in range(32) if irqs_asserted_bitmask.value & (1 << i)]
226-
WaitOnIrqsReturnValues = namedtuple('WaitOnIrqsReturnValues',
227-
["irqs_asserted", "timed_out"])
228-
return WaitOnIrqsReturnValues(irqs_asserted=irqs_asserted,
229-
timed_out=bool(timed_out.value))
229+
return self.WaitOnIrqsReturnValues(irqs_asserted=irqs_asserted,
230+
timed_out=bool(timed_out.value))
230231

231232
def acknowledge_irqs(self, irqs):
232233
""" Acknowledges an IRQ or set of IRQs.
@@ -744,6 +745,8 @@ def write(self, data, timeout_ms=0):
744745
empty_elements_remaining)
745746
return empty_elements_remaining.value
746747

748+
ReadValues = namedtuple("ReadValues", ["data", "elements_remaining"])
749+
747750
def read(self, number_of_elements, timeout_ms=0):
748751
""" Read the specified number of elements from the FIFO.
749752
@@ -774,10 +777,16 @@ def read(self, number_of_elements, timeout_ms=0):
774777
number_of_elements,
775778
timeout_ms,
776779
elements_remaining)
777-
data = [bool(elem) if self._datatype is DataType.Bool else elem for elem in buf]
778-
ReadValues = namedtuple("ReadValues", ["data", "elements_remaining"])
779-
return ReadValues(data=data,
780-
elements_remaining=elements_remaining.value)
780+
if self._datatype is DataType.Bool:
781+
data = [bool(elem) for elem in buf]
782+
else:
783+
data = [elem for elem in buf]
784+
return self.ReadValues(data=data,
785+
elements_remaining=elements_remaining.value)
786+
787+
AcquireWriteValues = namedtuple("AcquireWriteValues",
788+
["data", "elements_acquired",
789+
"elements_remaining"])
781790

782791
def _acquire_write(self, number_of_elements, timeout_ms=0):
783792
""" Write the specified number of elements from the FIFO.
@@ -807,13 +816,13 @@ def _acquire_write(self, number_of_elements, timeout_ms=0):
807816
timeout_ms,
808817
elements_acquired,
809818
elements_remaining)
819+
return self.AcquireWriteValues(data=block_out,
820+
elements_acquired=elements_acquired.value,
821+
elements_remaining=elements_remaining.value)
810822

811-
AcquireWriteValues = namedtuple("AcquireWriteValues",
812-
["data", "elements_acquired",
813-
"elements_remaining"])
814-
return AcquireWriteValues(data=block_out,
815-
elements_acquired=elements_acquired.value,
816-
elements_remaining=elements_remaining.value)
823+
AcquireReadValues = namedtuple("AcquireReadValues",
824+
["data", "elements_acquired",
825+
"elements_remaining"])
817826

818827
def _acquire_read(self, number_of_elements, timeout_ms=0):
819828
""" Read the specified number of elements from the FIFO.
@@ -844,12 +853,9 @@ def _acquire_read(self, number_of_elements, timeout_ms=0):
844853
timeout_ms,
845854
elements_acquired,
846855
elements_remaining)
847-
AcquireReadValues = namedtuple("AcquireReadValues",
848-
["data", "elements_acquired",
849-
"elements_remaining"])
850-
return AcquireReadValues(data=buf_ptr,
851-
elements_acquired=elements_acquired.value,
852-
elements_remaining=elements_remaining.value)
856+
return self.AcquireReadValues(data=buf_ptr,
857+
elements_acquired=elements_acquired.value,
858+
elements_remaining=elements_remaining.value)
853859

854860
def _release_elements(self, number_of_elements):
855861
""" Releases the FIFOs elements. """

0 commit comments

Comments
 (0)