我的一位教授说他会接受我们想要使用的任何语言的家庭作业.我的条款足够好,我想与他混淆一点并使用brainfuck,空格或一些同样"有用"的语言提交有效的家庭作业.
我有一些简单的数值分析例程的C源代码,以及它们生成的编译输出和汇编文件.
有没有人知道一个反编译器(或C-> brainfuck翻译器)可以给我一些类似于"brainfuck源代码"的东西?
我无法解释(并避免)Matlab mex程序与没有Matlab接口的相应C程序之间的速度差异.我一直在分析数值分析程序:
int main(){
Well_optimized_code();
}
Run Code Online (Sandbox Code Playgroud)
使用gcc 4.4针对Matlab-Mex等效编译(指向使用gcc44,这不是Matlab当前支持的版本,但出于其他原因需要):
void mexFunction(int nlhs,mxArray* plhs[], int nrhs, const mxArray* prhs[]){
Well_optimized_code(); //literally the exact same code
}
Run Code Online (Sandbox Code Playgroud)
我执行的时间如下:
$ time ./C_version
Run Code Online (Sandbox Code Playgroud)
与
>> tic; mex_version(); toc
Run Code Online (Sandbox Code Playgroud)
时间上的差异是惊人的.从命令行运行的版本平均需要5.8秒.Matlab中的版本在21秒内运行.对于上下文,mex文件替换了SimBiology工具箱中的算法,该算法大约需要26秒才能运行.
与Matlab的算法相比,C和mex版本都使用对openMP的调用线性扩展到27个线程,但为了进行性能分析,这些调用已被禁用并注释掉.
这两个版本以相同的方式编译,除了作为mex文件编译的必要标志:-fPIC --shared -lmex -DMATLAB_MEX_FILE应用于mex编译/链接.我删除了对mex文件的左右参数的所有引用.也就是说它不需要输入也没有输出,它仅用于分析.
伟大而光荣的谷歌告诉我,与位置无关的代码不应该是经济放缓的源头,除此之外我不知所措.
任何帮助将不胜感激,
安德鲁
所以,我喜欢我的Macbook,她爱我.我们有起伏,但在大多数情况下,我们的关系一直很强大.最近虽然我们打架了.它开始时就足够了.我曾要求她做更多,试图更具实验性.我们带来了诸如sse,快速数学和展开到卧室之类的东西,并编译了我们库的新版本.
它开始时很好.我们使用新库编译一些代码,测试新的水域.随着时间的推移,我们的表现随着夫妻飙升 她工作得更快,我认为一切都很好.然后事情变得更糟.我们带来了另一名球员.她的名字是Matlab.
我们开始为Matlab编译,
mex CC="gcc" CFLAGS="\$CFLAGS -msse -msse2 -msse3 -ffast-math -ftree-vectorize" LDFLAGS="\$LDFLAGS -msse2 -msse3 -ffast-math -ftree-vectorize" -I/usr/local/include -L/usr/local/lib -lsundials_cvode -lsundials_nvecserial -v -o kry_new.mexmaci64 mex_main.c
Run Code Online (Sandbox Code Playgroud)
编译和链接工作得很好.但后来麻烦开始了:
kry_new(param,init,0:60:240,abstol,rtol,1)
??? Invalid MEX-file
'/Users/Andrew/Documents/MATLAB/het_optim/kry_new.mexmaci64':
dlopen(/Users/Andrew/Documents/MATLAB/het_optim/kry_new.mexmaci64, 1):
Library not loaded: /usr/local/lib/libsundials_cvode.1.dylib
Referenced from: /Users/Andrew/Documents/MATLAB/het_optim/kry_new.mexmaci64
Reason: Incompatible library version: kry_new.mexmaci64 requires version
2.0.0 or later, but libsundials_cvode.1.dylib provides version 1.0.0.
Run Code Online (Sandbox Code Playgroud)
Matlab觉得我们的实验已经走到了尽头.它们是完全不同的库版本.我不知道她在哪里得到这个想法.我做了一些调查:
$ otool -L kry_new.mexmaci64
kry_new.mexmaci64:
/usr/local/lib/libsundials_cvode.1.dylib (compatibility version 2.0.0, current version 2.0.0)
@loader_path/libsundials_nvecserial.0.0.2.dylib (compatibility version 0.0.0, current version 0.0.2)
@loader_path/libmx.dylib (compatibility version 0.0.0, current …Run Code Online (Sandbox Code Playgroud) 我已经训练了一个DCGAN模型,现在想把它加载到一个库中,通过图像空间优化可视化神经元激活的驱动程序.
以下代码有效,但在进行后续图像分析时,迫使我使用(1,宽度,高度,通道)图像,这是一种痛苦(图书馆对网络输入形状的假设).
# creating TensorFlow session and loading the model
graph = tf.Graph()
sess = tf.InteractiveSession(graph=graph)
new_saver = tf.train.import_meta_graph(model_fn)
new_saver.restore(sess, './')
Run Code Online (Sandbox Code Playgroud)
我想更改input_map,在阅读源代码后,我希望这段代码能够正常工作:
graph = tf.Graph()
sess = tf.InteractiveSession(graph=graph)
t_input = tf.placeholder(np.float32, name='images') # define the input tensor
t_preprocessed = tf.expand_dims(t_input, 0)
new_saver = tf.train.import_meta_graph(model_fn, input_map={'images': t_input})
new_saver.restore(sess, './')
Run Code Online (Sandbox Code Playgroud)
但是得到了一个错误:
ValueError:tf.import_graph_def()要求使用非空
nameifinput_map.
当堆栈到达tf.import_graph_def()name字段时设置为import_scope,所以我尝试了以下操作:
graph = tf.Graph()
sess = tf.InteractiveSession(graph=graph)
t_input = tf.placeholder(np.float32, name='images') # define the input tensor
t_preprocessed = tf.expand_dims(t_input, 0)
new_saver = tf.train.import_meta_graph(model_fn, input_map={'images': …Run Code Online (Sandbox Code Playgroud) 我编写了一个依赖于某些C扩展的Python模块.这些C扩展依赖于几个已编译的C库.我希望能够分发与所有依赖项捆绑在一起的这个模块.
我把一个最小的例子放在一起(它可以在GitHub上找到它的全部内容).
目录结构是:
$ tree .
.
??? README.md
??? poc
? ??? __init__.py
? ??? cython_extensions
? ? ??? __init__.py
? ? ??? cvRoberts_dns.c
? ? ??? cvRoberts_dns.h
? ? ??? helloworld.c
? ? ??? helloworld.pxd
? ? ??? helloworld.pyx
? ? ??? test.c
? ? ??? test.h
? ??? do_stuff.c
? ??? do_stuff.pyx
??? setup.py
Run Code Online (Sandbox Code Playgroud)
setup.py构建扩展和对必需的库链接(libsundials_cvode,libsundials_nvectorserial在这种情况下):
from setuptools import setup, find_packages
from setuptools.extension import Extension
from Cython.Build import cythonize
ext_module_dostuff = Extension( …Run Code Online (Sandbox Code Playgroud) 有没有办法在提交作业之前直接将参数传递给.pbs脚本?我需要遍历由不同数字指示的文件列表,并应用脚本来分析每个文件.
我能想出的最好成绩如下:
#!/bin/sh
for ((i= 1; i<= 10; i++))
do
export FILENUM=$i
qsub pass_test.pbs
done
Run Code Online (Sandbox Code Playgroud)
其中pass_test.pbs是以下脚本:
#!/bin/sh
#PBS -V
#PBS -S /bin/sh
#PBS -N pass_test
#PBS -l nodes=1:ppn=1,walltime=00:02:00
#PBS -M XXXXXX@XXX.edu
cd /scratch/XXXXXX/pass_test
./run_test $FILENUM
Run Code Online (Sandbox Code Playgroud)
但这感觉有点不稳定.特别是,我想避免创建一个环境变量来处理这个问题.
我写了一个以下形式的程序:
#include "stuff_I_need.h"
int main(){
construct_array(); // uses OpenMP pragma's
print_array();
return(0);
}
Run Code Online (Sandbox Code Playgroud)
使用以下命令正确编译,链接和运行:
`gcc44 -I/home/matteson/sundials/include/ main.c -lm -L/home/matteson/sundials/lib -lsundials_cvode -lsundials_nvecserial -fopenmp -o /home/matteson/MPI_test/CVODE_test/main_test`
Run Code Online (Sandbox Code Playgroud)
"gcc44"只是gcc 4.4版本,因为它是在一个维护多个版本gcc的集群上编译的.库sundials_cvode和sundials_nvecserial用于在构造阵列期间求解几个微分方程.
现在,当我想转移到Matlab并尝试编译表单的mex文件时:
#include "stuff_I_need.h"
void mexFunction(int nlhs,mxArray* plhs[], int nrhs, const mxArray* prhs[]){
construct_array(); // uses OpenMP pragma's
print_array();
}
Run Code Online (Sandbox Code Playgroud)
并尝试在Matlab中使用以下命令进行编译:
>> mex -v CC="gcc44" CFLAGS="\$CFLAGS -I/home/matteson/sundials/include/ -fopenmp" LDFLAGS="\$LDFLAGS -fopenmp -L/home/matteson/sundials/lib -lsundials_cvode -lsundials_nvecserial" mex_cvode.c
Run Code Online (Sandbox Code Playgroud)
我收到以下消息,最终导致链接错误:
-> mexopts.sh sourced from directory (DIR = $HOME/.matlab/$REL_VERSION)
FILE = /home/matteson/.matlab/R2010b/mexopts.sh
----------------------------------------------------------------
-> MATLAB = /misc/linux/64/opt/pkg/matlab/R2010b
-> CC = gcc44 …Run Code Online (Sandbox Code Playgroud) 对于一些循环优化问题的解释,Google并没有向我提出大神.所以,在悲伤中我没有Google-fu,我转向你StackOverflow.
我正在优化一个C程序来解决一个特定的微分方程系统.在找到数值解的过程中,我称之为一个函数,它建立一个线性方程组,然后是一个解决它的函数.
解决方案函数最初在访问定义线性系统的阵列对角线上的元素时存在瓶颈.所以我包含了一个在系统初始化期间设置的一维数组,它保存了数组对角线的值.
为了好玩,我继续使用初始化对角元素的代码,测量所花费的时间并尝试不断改进代码.我试过的版本引出了一些问题:
注意:我将我尝试过的所有版本放入一个函数中,并对此函数进行了分析,以查看花费的时间.我将报告一个版本的执行时间占功能总时间的百分比.该功能评估了数百万次.数字越小越好.
代码中使用的相关数据声明:
/* quick definitions of the relevant variables, data is a struct */
static const int sp_diag_ind[98] = {2,12,23,76,120,129,137,142,.../* long list */};
double *spJ = &(data->spJ[0]);
/* data has double spJ[908] that represents a sparse matrix stored in triplet
* form, I grab the pointer because I've found it to be more
* efficient than referencing data->spJ[x] each time I need it
*/
int iter,jter;
double *diag_data = NV_DATA_S(data->J_diag);
/* data->J_diag has a content …Run Code Online (Sandbox Code Playgroud) 我正在尝试模拟从 Jasmine 测试中的打字稿文件导出的函数。我希望以下内容模拟导入foo并在 bar 的规范中返回值 1。
模拟似乎没有被调用,所以我显然错过了一些东西。我该如何解决这个例子?
演示.ts:
export function foo(input: any): any {
return 2;
}
export function bar(input: any): any {
return foo(input) + 2;
}
Run Code Online (Sandbox Code Playgroud)
演示.ts.spec:
import * as demo from './demo';
describe('foo:', () => {
it('returns 2', () => {
const actual = demo.foo(1);
expect(actual).toEqual(2);
});
});
describe('bar:', () => {
// let fooSpy;
beforeEach(() => {
spyOn(demo, 'foo' as any).and.returnValue(1); // 'as any' prevents compiler warning
});
it('verifies that foo was called', () …Run Code Online (Sandbox Code Playgroud) 我在matlab中使用长时间运行的parfor循环.
parfor iter=1:1000
chunk_of_work(iter);
end
Run Code Online (Sandbox Code Playgroud)
每次运行通常有大约2-3个定时异常值.也就是说,每执行1000次大量的工作,其中2-3次比其余工作长约100倍.随着循环接近完成,评估异常值的工人继续运行,而其余工人没有计算负荷.
这与静态分配工作的parfor循环一致.这与此处的并行计算工具箱的文档形成对比:
"工作分配是动态的,而不是被分配一个固定的迭代范围内,工人被分配一个新的迭代后,才处理完自己的当前迭代,这导致即使工作负荷分配."
关于发生了什么的任何想法?
matlab ×4
c ×3
mex ×2
optimization ×2
unix ×2
bash ×1
brainfuck ×1
decompiler ×1
jasmine ×1
loops ×1
mocking ×1
openmp ×1
pbs ×1
python ×1
qsub ×1
setuptools ×1
shark ×1
spy ×1
symlink ×1
tensorflow ×1
typescript ×1
unit-testing ×1