Added LICENSE & coding changes required

This commit is contained in:
doinachiroiu 2020-08-26 14:18:31 +00:00
parent 8f21b0e931
commit 139723d3b8
6 changed files with 85 additions and 68 deletions

View File

@ -1,3 +1,17 @@
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
cmake_minimum_required(VERSION 3.10)
project(pffft CXX C)
@ -13,7 +27,7 @@ add_library(pffft STATIC
)
add_executable(pffft_main
main_pffft.c
test_pffft.c
)
target_link_libraries(pffft_main PRIVATE

View File

@ -1,15 +0,0 @@
CXXFLAGS ?= -std=c++17
pffft_main: test_pffft.o libpffft.a
$(CXX) -o $@ $(CXXFLAGS) $(LDFLAGS) $^
libpffft.a: pffft.o fftpack.o
ar rcs $@ $^
pffft.c: pffft.h
fftpack.c: fftpack.h
.PHONY: clean
clean:
rm -f *.o *.a pffft_main

View File

@ -1,14 +1,23 @@
# Sandboxing PFFFT library
Builder: CMake
Build System: CMake
OS: Linux
### Check out the PFFFT library & CMake set up
`mkdir -p build && cd build`
`git clone https://bitbucket.org/jpommier/pffft.git`
`cmake .. -G Ninja -DPFFFT_ROOT_DIR=$PWD`
`ninja`
### For testing:
`cd build`, then `./pffft_sandboxed`
### For debug:
`SAPI_VLOG_LEVEL=1 ./pffft_sandboxed --v=100
--sandbox2_danger_danger_permit_all_and_log <auxiliar file>`
display custom info with
`./pffft_sandboxed --logtostderr`
## ***About the project***
*PFFFT library is concerned with 1D Fast-Fourier Transformations finding a
@ -53,7 +62,7 @@ In the end, the performance of PFFFT library it is outlined by the output.*
### Bugs history
- [Solved] pffft benchmark bug: "Sandbox not active"
1. [Solved] pffft benchmark bug: "Sandbox not active"
N = 64, status OK, pffft_transform generates error
N > 64, status not OK
Problem on initialising sapi::StatusOr<PFFFT_Setup *> s; the memory that stays
@ -66,7 +75,7 @@ In the end, the performance of PFFFT library it is outlined by the output.*
Solution: using "sapi::v::RemotePtr" instead of "sapi::v::GenericPtr"
to access the memory of object s
- [Unresolved] compiling bug: "No space left on device"
2. [Unresolved] compiling bug: "No space left on device"
The building process creates some `embed` files that use lots of
memory, trying to write them on /tmp.

View File

@ -1,3 +1,17 @@
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <glog/logging.h>
#include <stdlib.h>
#include <string.h>
@ -17,7 +31,7 @@
ABSL_DECLARE_FLAG(string, sandbox2_danger_danger_permit_all);
ABSL_DECLARE_FLAG(string, sandbox2_danger_danger_permit_all_and_log);
class pffftSapiSandbox : public pffftSandbox {
class PffftSapiSandbox : public pffftSandbox {
public:
std::unique_ptr<sandbox2::Policy> ModifyPolicy(
sandbox2::PolicyBuilder*) override {
@ -60,28 +74,26 @@ void ShowOutput(const char* name, int N, int cplx, float flops, float t0,
}
int main(int argc, char* argv[]) {
/*
* Initialize Google's logging library.
*/
// Initialize Google's logging library.
google::InitGoogleLogging(argv[0]);
gflags::ParseCommandLineFlags(&argc, &argv, true);
/*
* Nvalues is a vector keeping the values by which iterates N, its value
* representing the input length. More concrete, N is the number of
* data points the caclulus is up to (determinating its accuracy).
* To show the performance of Fast-Fourier Transformations the program is
* testing for various values of N.
*/
// Nvalues is a vector keeping the values by which iterates N, its value
// representing the input length. More concrete, N is the number of
// data points the caclulus is up to (determinating its accuracy).
// To show the performance of Fast-Fourier Transformations the program is
// testing for various values of N.
int Nvalues[] = {64, 96, 128, 160, 192, 256,
384, 5 * 96, 512, 5 * 128, 3 * 256, 800,
1024, 2048, 2400, 4096, 8192, 9 * 1024,
16384, 32768, 256 * 1024, 1024 * 1024, -1};
16384, 32768};
int i;
LOG(INFO) << "Initializing sandbox...\n";
pffftSapiSandbox sandbox;
PffftSapiSandbox sandbox;
absl::Status init_status = sandbox.Init();
LOG(INFO) << "Initialization: " << init_status.ToString().c_str() << "\n";
@ -112,13 +124,9 @@ int main(int argc, char* argv[]) {
X[k] = 0;
}
/*
* FFTPack benchmark
*/
// FFTPack benchmark
{
/*
* SIMD_SZ == 4 (returning value of pffft_simd_size())
*/
// SIMD_SZ == 4 (returning value of pffft_simd_size())
int max_iter_ = max_iter / 4;
if (max_iter_ == 0) max_iter_ = 1;
@ -145,9 +153,7 @@ int main(int argc, char* argv[]) {
ShowOutput("FFTPack", N, cplx, flops, t0, t1, max_iter_);
}
/*
* PFFFT benchmark
*/
// PFFFT benchmark
{
sapi::StatusOr<PFFFT_Setup*> s =
api.pffft_new_setup(N, cplx ? PFFFT_COMPLEX : PFFFT_REAL);
@ -155,7 +161,11 @@ int main(int argc, char* argv[]) {
LOG(INFO) << "Setup status is: " << s.status().ToString().c_str()
<< "\n";
if (s.ok()) {
if (!s.ok()) {
printf("Sandbox failed.\n");
return 1;
}
sapi::v::RemotePtr s_reg(s.value());
t0 = UclockSec();
@ -174,7 +184,6 @@ int main(int argc, char* argv[]) {
flops =
(max_iter * 2) * ((cplx ? 5 : 2.5) * N * log((double)N) / M_LN2);
ShowOutput("PFFFT", N, cplx, flops, t0, t1, max_iter);
}
LOG(INFO) << "N = " << N << " SUCCESSFULLY\n\n";
}