如何加速这个Common Lisp / CFFI代码,一个放在一个let中的defun

时间:2014-04-24 03:29:55

标签: common-lisp cffi

这是代码,它的工作原理如下:

    (let ((previous nil))
      (defun vector-int (&optional arg i n (v (if (< n 5) :float :int)))
        (cond ((and (pointerp arg) i n) 
           (unless (equal v (car previous))
             (setf previous (cons v (v (if (< n 5) :float :int)))) 
           (mem-aref (mem-aref (%vector-int-to-c-array arg) :pointer i) (cdr previous) n))
          (t nil))))

%vector-int-to-c-array函数并不重要,但要运行它(来自上面的代码):

(mem-aref (mem-aref (%vector-int-to-c-array arg) :pointer i) :int n)

一百万次运行需要0.5秒。如果我运行vector-int函数,则需要.68秒而没有(v (if (< n 5) :float :int))参数和&#34;除非&#34;的表达。 但如上所述,100万次运行需要1.5秒。我需要n但是:如果n小于5则浮动:或者如果n是5或更大则是int。任何人都可以帮助我将这段代码的速度提高到不超过.68秒,运行100万次。唯一需要注意的是我需要保留cond声明。因为我将这段代码缩小到现在这里,我有其他条件在这部分加速之后添加,当我再次运行vector-int时我必须能够更改n并自动计算更新后的数据。

0 个答案:

没有答案